#include<stdio.h>
#include<stdlib.h>

#define PAGELEN 24	//一屏设定为24行

int see_more();
 
//1.处理最简单的 more filename
int main(int argc, char* argv[]) {
	
	FILE* fp;
	#define LINELEN 512	//一行最长设定为512个字符
	char line[LINELEN];	//存放读出的数据
	int num_of_line;	//输出行数

	//1. 参数校验
	if(argc != 2) {
		
		exit(EXIT_FAILURE);
	}

	//2. 打开文件
	if((fp = fopen(argv[1],"r")) == NULL) {

		exit(EXIT_FAILURE);	
	}

	//3. 终端输出
	while(fgets(line, LINELEN, fp)) {		//正常来说这个循环会一直执行下去
		if(num_of_line == PAGELEN) {		//当num_of_len增大到PAGELEN的时,输出满一屏了
			int reply = see_more();			//显示more，并且有getchar，等待用户输入，此时程序就停了
			if(reply == 0)					//后面的代码会根据用户的指令进行下一步的操作
				break;
			num_of_line -= reply;
		}	

		if (fputs(line, stdout) == EOF) {
			fclose(fp);
			exit(1);
		}
	
		num_of_line++;
	}

	//4. 关闭文件
	

	return 0;
}

int see_more() {
	
	char c;					//从终端获取的字符
	printf("more");					
			
	//从终端获取输入，此时程序会停止等待输入
	while((c = getchar()) != EOF) {
		if(c == 'q') {
			return 0;		//不看了退出
		}	
		if(c == ' ') {
			return PAGELEN;	//看下一屏
		}
		if(c == '\n') {
			return 1;		//再看下一行
		}
	}
}



